# builtins模块解释
# https://blog.csdn.net/happyjacob/article/details/109482015

# 导入内建模块
import builtins


def print_hello():
    print("Hello World~")


builtins.__dict__['hello'] = print_hello

print_hello()

hello()

print('-' * 40)

################################################ Ellipsis（...)

# 在 Python 中，Ellipsis 是一个特殊的内置对象，通常用三个点（...）来表示。它是一个单例对象，属于 builtins 模块，因此可以直接使用而无需导入。

# Ellipsis 的定义
# 名称：Ellipsis 是一个全局变量，指向一个特殊的对象。
# 表示形式：可以用 Ellipsis 或 ... 来表示它。
# 类型：Ellipsis 的类型是 <class 'ellipsis'>。
# 值：它是一个单例对象，类似于 None，只有一个实例。

print(Ellipsis)
print(...)
# 输出:<class 'ellipsis'>
print(type(Ellipsis))
# 输出:<class 'ellipsis'>
print(type(...))


# Ellipsis作用：
# 1. 占位符
def ellipsis():
    # 可以代替pass起到占位符的作用
    ...


# 2.NumPy 和多维数组切片


# 3. 类型提示中的必填字段
from pydantic import BaseModel, Field


class Person(BaseModel):
    # 其中...表示当前name字段必填
    name: str = Field(..., description='用户姓名')


# 4 自定义用途
# 由于 Ellipsis 是一个独特的对象，可以将其用作标记值或特殊信号。例如，在某些框架中，用 ... 表示某种未定义的状态。
def process_data(data):
    # 当成是特殊的标记
    if data is ...:
        print('data is not yet defined')
    else:
        print(f'process data:{data}')

# 总的来说...是一个特殊的内置对象，具体用来说什么，要看用户行为。
